import java.io.*;
import java.net.*;
import java.util.*;

public class MulticastServer {
  
  public static void main(String[] args) throws java.io.IOException {
    new MulticastServerThread().start();
  }
}

class MulticastServerThread extends QuoteServerThread {
  
  private long FIVE_SECONDS = 5000;

  public MulticastServerThread() throws IOException {
    super("MulticastServerThread");
  }

  public void run() {
    while (moreQuotes) {
      try {
        byte[] buf = new byte[256];

        // construct quote
        String dString = null;
        if (in == null)
          dString = new Date().toString();
        else
          dString = getNextQuote();
        System.out.println(dString);
        buf = dString.getBytes();

        // send it
        InetAddress group = InetAddress.getByName("230.0.0.255");
        DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 4446);
        socket.send(packet);

        // sleep for a while
        try {
          sleep((long)(Math.random() * FIVE_SECONDS));
        } 
        catch (InterruptedException e) { 
        }
      } 
      catch (IOException e) {
        e.printStackTrace();
        moreQuotes = false;
      }
    }
    socket.close();
  }

  protected String getNextQuote() {
    String returnValue = super.getNextQuote();
    try {
      if (!moreQuotes) {
        in = new BufferedReader(new FileReader("one-liners.txt"));
        moreQuotes = true;
      }
    } 
    catch (IOException e) {
      returnValue = "IOException occurred in server : " + e;
    }
    return returnValue;
  }
}
